/**
 * Copyright (c) 2018 人人开源 All rights reserved.
 *
 * https://www.renren.io
 *
 * 版权所有，侵权必究！
 */

package io.renren.modules.job.task;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.renren.modules.sp.dao.SpMatchDao;
import io.renren.modules.sp.dao.SpMatchItemTeamDao;
import io.renren.modules.sp.dao.SpTeamDao;
import io.renren.modules.sp.entity.SpMatchEntity;
import io.renren.modules.sp.entity.SpMatchItemTeamEntity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

/**
 * ①增加定时任务，赛事时间到期后改成完赛
 * ②比赛开始，刷成比赛中
 * 凌晨1点执行
 * @author Mark sunlightcs@gmail.com
 */
@Component("refreshTeamStatusTask")
public class RefreshTeamStatusTask implements ITask{
	private Logger logger = LoggerFactory.getLogger(getClass());

	@Autowired
	private SpTeamDao spTeamDao;
	@Autowired
	private SpMatchDao spMatchDao;
	@Autowired
	private SpMatchItemTeamDao spMatchItemTeamDao;

	@Override
	public void run(String params){
		logger.debug("TestTask定时任务正在执行，参数为：{}", params);
		this.updateTeamStatus();
	}

	private void updateTeamStatus(){
		/**
		 * 刷新比赛中
		 * 1、查询比赛开始时间在当天的比赛
		 * 2、循环把比赛下的队伍状态改为比赛中，只有报名成功的才能改为比赛中
		 *   0审核中 1报名成功 2完赛 3已取消 4比赛中 5已获晋级资格 6晋级成功 7弃权 8驳回 9待确认 10报名未成功
		 *
		 */
		List<Map<String,Object>> signUpList = spMatchDao.querySignUpList();
		for(Map<String,Object> teamUser : signUpList) {
			SpMatchItemTeamEntity teamEntity = spMatchItemTeamDao.selectById((Long)teamUser.get("id"));
			teamEntity.setStatus(4);
			spMatchItemTeamDao.updateById(teamEntity);
		}

		/**
		 * 报名成功 比赛中的刷成完赛
		 * 1、4 报名成功、比赛中的改为完赛
 		 */
		List<Map<String,Object>> matchList = spMatchDao.queryMatchingList("1,4");
		for(Map<String,Object> teamUser : matchList) {
			SpMatchItemTeamEntity teamEntity = spMatchItemTeamDao.selectById((Long)teamUser.get("id"));
			teamEntity.setStatus(2);
			spMatchItemTeamDao.updateById(teamEntity);
		}

		/**
		 * 到了截止日期的第二天一两点，跑一个定时任务：
		 *  待确认/晋级确认状态的，变为一个新的状态10 “报名已截止”
		 * 	报名已截止，除了出现在管理员后台审核列表里，未来不再参与任何实际的功能
		 * 	报名已截止对应后面没有蓝色可操作按钮，但那个位置显示灰色的小字“报名未成功”
		 */
		List<Map<String,Object>> matchList2 = spMatchDao.queryMatchingListByEndSignup("9");
		for(Map<String,Object> teamUser : matchList2) {
			SpMatchItemTeamEntity teamEntity = spMatchItemTeamDao.selectById((Long)teamUser.get("id"));
			Integer status = teamEntity.getStatus();
			// 5已获晋级赛资格
			if(status.intValue() == 5){
				// 如果超过国赛报名截止时间未确认晋级，状态变为完赛&申请按钮消失
				teamEntity.setStatus(2);
				teamEntity.setRejectReason("晋级确认截止");
			}else {
				teamEntity.setStatus(10);
			}
			spMatchItemTeamDao.updateById(teamEntity);
		}

	}



}